﻿
$(document).ready(function () {
    if (typeof (VOFFICE) == "undefined") {
        // ReSharper disable AssignToImplicitGlobalInFunctionScope
        VOFFICE = {};
        // ReSharper restore AssignToImplicitGlobalInFunctionScope
    }

    VOFFICE.Library = (function () {
        var methods = {}; 
        methods.PageIndex = 1;
        methods.PageSize = 20;
        methods.LibraryGrid = null;
        methods.LibraryName = null;
        methods.LibraryList = null;
        methods.Collection = new LibraryCollection();
        methods.CustomValidate = {
            errorLabelContainer: "#library-form-error",
            rules: {
                Name: { required: true }
            }
        };
        methods.LibraryForm = null;
        var $table = $('#list-details');
        var $pager = $('#pager');
        //hàm mở dialog để thêm sửa tùm lum
        var $dialog = $('#library-dialog').dialog({
            autoOpen: false,
            show: "fade",
            hide: "fade",
            modal: true,
            height: 'auto',
            width: 600,
            open: function (event, ui) {
                $('.ui-dialog-titlebar', ui.dialog || ui).hide();
            },
            close: function (event, ui) {
               
            }
        });

        /*
        Lấy hết sổ văn bản theo phân trang
        */
        var getPagedBook = function (pageIndex) {
            pageIndex = parseFloat(pageIndex) - 1;
            $.get('/library/get_all', { 'pageIndex': pageIndex, 'pageSize': methods.PageSize }, function (data) {
                if (!!data && data.Status == true) {
                    if (!!data.Result.List && data.Result.List.length > 0) {
                        VH.DateUtility.FixDates(data);
                        $table.find('tbody').remove();
                        var list = new LibraryCollection();
                        _.each(data.Result.List, function (item) {
                            var library = new Library({
                                'id': item.Id,
                                'Name': item.Name,
                                'Description': item.Description,
                                'Attachment': item.Attachment,
                                'IsSubmission': item.IsSubmission,
                                'IsActive': item.IsActive,
                                'CreatedAt': item.CreatedAt,
                                'UpdatedAt': item.UpdatedAt,
                                'CreatorId': item.CreatorId,
                                'AttachmentName': item.AttachmentName,
                                'RelateToId': item.RelateToId,
                            });
                            list.push(library);
                        });
                        methods.Collection = list;
                        methods.LibraryGrid = new LibraryGrid({ collection: list });
                        $table.append(methods.LibraryGrid.render().el);

                        //phân trang
                        paging(1 + data.Result.PageIndex, data.Result.PageCount);
                    } else {

                    }
                }
            });
        };



        var addNew = function () {
            //get all data for dropdownlist
            var addForm = new LibraryForm({ model: new Library() });
            methods.LibraryForm.initUpload();
            addForm.render();
        };
        
       
        methods.edit = function (model) {
            var editForm = new LibraryForm({ model: model });
            methods.LibraryForm.initUpload();
            editForm.render();
     
        };
        // hàm tạo
        /*
        Hàm cập nhập dữ liệu trên trang sau khi save
        */
        methods.updateGrid = function (model, isNew) {
            $table.fadeIn("fast");
            if (isNew) {
                methods.Collection.add(model, { at: 0 });
            }
            $dialog.dialog('close');
        };
        //hàm đóng dialog
        methods.closeDialog = function () {
            $dialog.dialog('close');
        };

        methods.recallValidate = function () {
            $('#library-form').validate();
        };
        /*
        Tạo phân trang
        */
        var paging = function (currentPage, pageCount) {
            $pager.pager({ pagenumber: currentPage, pagecount: pageCount, buttonClickCallback: getPagedBook });
        };

        // quy ước về hàm khởi tạo các action trên form động
        methods.init = function () {
            $('#add-new').live('click', addNew);
            getPagedBook(1);
        
        };
        return methods;
    })(VOFFICE.Library);

    //gọi hàm khởi tạo
    VOFFICE.Library.init();
});

/*
View để thêm mới hay chỉnh sửa văn bản
*/
window.LibraryForm = Backbone.View.extend({

    initialize: function () {
//        $('#library-form').live('submit', { view: this }, this.submit);
        $('#library-form').die('submit');
        $('#library-form').live('submit', { view: this }, this.submit);
        //bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },

    /* 
    cập nhập hoặc thêm mới sổ văn bản 
    */
    
//    submit: function (event) {
//        event.preventDefault();
//        //bug fixes
//        var self = VOFFICE.Library.LibraryForm;
//        if (!self) {
//            VOFFICE.Library.closeDialog();
//        }
//        var isNew = self.model.isNew();
//        //tao moi hay cap nhap du lieu
//        SaveIndicator.indicate(self.model.save({
//                //cần ghi nhớ để khai báo các thành phần đẩy lên server
//            'Name': $('#Name').val(),
//            'Description': $('#Description').val(),
//            'IsSubmission':$('#IsSubmission').is(':checked'),
//            'IsActive': $('#IsActive').is(':checked')
//        }, {
//            success: function (data) {
//                if(!!data && data.get('Status')==true) {
//                VOFFICE.Library.updateGrid(self.model, isNew);
//                    }
//            },
//            error: function (data) {
//                VOFFICE.Library.closeDialog();
//            },
//            complete: function () {
//                self.close();
//                return false;
//            }
//        }));
//    },
   
    initUpload:function() {
        var self = this;
        this.TodoUploader = new qq.FileUploader({
            uploadButtonText : jsResources.lang.QQ_uploadButtonText,      
            cancelButtonText: jsResources.lang.QQ_cancelButtonText,        
            failUploadText: jsResources.lang.QQ_failUploadText,
            // pass the dom node (ex. $(selector)[0] for jQuery users)
            element: document.getElementById('upload-button'),
            // path to server-side upload script
            action: '/library/upload_file',
            params: { 'folder': '/Assets/library/' },
            onSubmit: function (id, fileName) {            },
            onComplete: function(id, fileName, responseJSON){
                self.model.set({
                    'Name': $('#Name').val(),
                    'Description': $('#Description').val(),
                    'IsSubmission':$('#IsSubmission').is(':checked'),
                    'IsActive': $('#IsActive').is(':checked'),
                    'Attachment': '/Assets/library/',
                    'AttachmentName': fileName 
                });
            }
        });  
    },
    
    render: function () {
        var self = this;
        this.template = _.template($('#library-form-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        VOFFICE.Library.dialog.html($(this.el).html(this.template({ model: this.model.toJSON() })));
        var isNew = this.model.get('id') == 0;
        if (!isNew) {
            VOFFICE.Library.dialog.dialog('option','title',jsResources.lang.ManageLibrary_UpdateTitle);
        } else {
            VOFFICE.Library.dialog.dialog('option', 'title', jsResources.lang.ManageLibrary_AddTittle);
        }
        var dialogCloseButtons = jsResources.lang.ButtonClose;
        var dialogUpdateButtons = jsResources.lang.Update;
        var dialogButtons = { };
        dialogButtons[dialogUpdateButtons] = function() {
            SaveIndicator.indicate(self.model.save({
                //cần ghi nhớ để khai báo các thành phần đẩy lên server
            'Name': $('#Name').val(),
            'Description': $('#Description').val(),
            'IsSubmission':$('#IsSubmission').is(':checked'),
            'IsActive': $('#IsActive').is(':checked')
        }, {
            success: function (data) {
                if(!!data && data.get('Status')==true) {
                VOFFICE.Library.updateGrid(self.model, isNew);
                    }
            },
            error: function (data) {
                VOFFICE.Library.closeDialog();
            },
            complete: function () {
            }
        }));
        };
        dialogButtons[dialogCloseButtons] = function() {
            $(this).dialog('close');
        };
        VOFFICE.Library.dialog.dialog({
           buttons:dialogButtons             
        });
        VOFFICE.Library.dialog.dialog('open');
        return this;
    },

    close: function () {
        this.remove();
        this.unbind();
        this.model.unbind("change", this.render, this);
         $('#library-form').die("submit", this.submit);
    }
});
/*
Chứa một collection là list các book model
gọi đến LibraryGridItem để hiển thị dữ liệu
*/
window.LibraryGrid = Backbone.View.extend({
    tagName: 'tbody',
    render: function () {
        $(this.el).html('');
        var i = 1;
        _.each(this.collection.models, function (library) {
            library.set({ 'Order': i });
            $(this.el).append((new LibraryGridItem({ model: library })).render().el);
            i++;
        }, this);
        return this;
    },

    /* 
    Khi grid có thêm bản ghi thì cập nhập
    */
    initialize: function () {
        var self = this;
        this.collection.bind("add", function (library) {
            $(self.el).append(new LibraryGridItem({ model: library }).render().el);
        });
    }
});

/*
từng item trong grid dữ liệu
các item này tạo thành table chứa thông tin tất cả các book có trong hệ thống
*/
window.LibraryGridItem = Backbone.View.extend({
    tagName: 'tr',

    //bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
    initialize: function () {
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },
    /*
    các sự kiện trên một dòng trong grid 
    */
    events: {
        'click .grid-update': 'showUpdate',
        'click .grid-delete': 'deleteLibrary',
        'change .cbxIsActive': 'active',
        'change .cbxIsSubmission': 'submission'
    },

    /*
    Active hay InActive sổ văn bản
    */
    active: function (event) {
        var $target = $(event.currentTarget);
        var self = this;
        //luu du lieu
        SaveIndicator.indicate(self.model.save({ 'IsActive': $target.is(':checked'), 'modified': 'IsActive' }, function (data) {
            if (!data || data.Status == false) {
                alert("");
            }
        }));
    },

    submission: function (event) {
        var $target = $(event.currentTarget);
        var self = this;
        //luu du lieu
        SaveIndicator.indicate(self.model.save({ 'IsSubmission': $target.is(':checked'), 'modified': 'IsSubmission' }, function (data) {
            if (!data || data.Status == false) {
                alert("đã thay đổi trạng thái");
            }
        }));
    },
    /*
    Xóa văn bản 
    */
    // đã xóa thành công by anhtt67
    deleteLibrary: function (event) {
        var self = this;
        // lấy đa ngôn ngữ
        VH.ConfirmBox("Bạn có muốn xóa không", jsResources.lang.Delete, jsResources.lang.Cancel,
            function () {
                //xoa du lieu
                SaveIndicator.indicate($.post('/library/delete', { id: self.model.get('id') }, function (data) {
                    if (!!data && data.Status == true) {
                        self.close();
                    } else {
                        alert("sao không xóa");
                    }
                }));
            },
            function () {
                return true;
            }
        );
    },


    /*
    Hiển thị màn hình để cập nhập sổ văn bản
    */
    showUpdate: function (event) {
        VOFFICE.Library.edit(this.model);
    },

    /*
    Kết hợp template và model để hiển thị lên 1 dòng (tr)
    chứa thông tin của văn bản
    */
    render: function () {
        this.template = _.template($('#list-item-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        return this;
    },
    close: function () {
        $(this.el).remove();
    }
});
